package com.cgnpc.scp.sri.budget.controller;

import com.cgnpc.cud.annotation.OperatorType;
import com.cgnpc.cud.annotation.UBA;
import com.cgnpc.cud.core.domain.AjaxResult;
import com.cgnpc.scp.common.bean.CreateFileInfo;
import com.cgnpc.scp.common.bean.MyPageResult;
import com.cgnpc.scp.common.utils.AjaxResultUtil;
import com.cgnpc.scp.hse.controller.HseCheckOptionsConfigController;
import com.cgnpc.scp.sri.budget.mybatis.entity.BudgetInfo;
import com.cgnpc.scp.sri.budget.service.BudgetInfoService;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**********************************
 * 用途说明: 调试科研创新管理 - 预算管理
 * 作者姓名: zhangyibing
 * 创建时间: 2020年10月4日22:01:04
 ***********************************/
@RestController
@RequestMapping("/scp/sri/budget")
public class BudgetInfoController {
    private static final Logger LOGGER = LoggerFactory.getLogger(HseCheckOptionsConfigController.class);

    @Autowired
    private BudgetInfoService budgetInfoService;

    @Autowired
    private MessageSource messageSource;

    /**********************************
     * 用途说明: 调试科研创新管理 - 预算管理 - 列表
     * 参数说明 params
     * 返回值说明: 列表
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 预算管理 - 列表")
    @UBA(module = "调试科研创新管理", action = "预算管理查询", channel = OperatorType.Page)
    @RequestMapping(value = "/listPage", method = {RequestMethod.POST})
    public AjaxResult listPage(HttpServletRequest request, @RequestBody Map<String, Object> params) {
        try {
            MyPageResult<BudgetInfo> result = budgetInfoService.queryListPage(params);
            return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,result);
        } catch (Exception e) {
            LOGGER.error("BudgetInfoController listPage error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 预算管理 - 获取所有预算年份
     * 参数说明 params
     * 返回值说明: 所有年份
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 预算管理 - 获取所有预算年份")
    @RequestMapping(value = "/getAllYear", method = {RequestMethod.POST})
    public AjaxResult getAllYear(HttpServletRequest request) {
        try {
            List<String> result = budgetInfoService.getAllYear();
            return AjaxResult.success().put("years",result);
        } catch (Exception e) {
            LOGGER.error("BudgetInfoController getAllYear error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 预算管理 - 新增预算
     * 参数说明 params
     * 返回值说明:
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 预算管理 - 新增预算")
    @UBA(module = "调试科研创新管理", action = "新增预算", channel = OperatorType.Button)
    @RequestMapping(value = "/save", method = {RequestMethod.POST})
    public AjaxResult save(HttpServletRequest request, @RequestBody BudgetInfo budgetInfo) {
        try {
            return budgetInfoService.save(budgetInfo);
        } catch (Exception e) {
            LOGGER.error("BudgetInfoController save error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 预算管理 - 编辑预算
     * 参数说明 params
     * 返回值说明:
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 预算管理 - 编辑预算")
    @UBA(module = "调试科研创新管理", action = "编辑预算", channel = OperatorType.Button)
    @RequestMapping(value = "/update", method = {RequestMethod.POST})
    public AjaxResult update(HttpServletRequest request, @RequestBody BudgetInfo budgetInfo) {
        try {
            return budgetInfoService.update(budgetInfo);
        } catch (Exception e) {
            LOGGER.error("BudgetInfoController update error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 预算管理 - 预算详情
     * 参数说明 params
     * 返回值说明:
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 预算管理 - 预算详情")
    @UBA(module = "调试科研创新管理", action = "查看预算详情", channel = OperatorType.Button)
    @RequestMapping(value = "/budgetInfo", method = {RequestMethod.POST})
    public AjaxResult budgetInfo(HttpServletRequest request, @RequestBody Map<String, Object> params) {
        try {
            return budgetInfoService.budgetInfo(params.get("id")+"");
        } catch (Exception e) {
            LOGGER.error("BudgetInfoController budgetInfo error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }
    /**********************************
     * 用途说明: 调试科研创新管理 - 预算明细-导出Excel
     * 参数说明: HttpServletRequest request, @RequestBody T reqEntity
     * 返回值说明: Object
     ***********************************/
    @ApiOperation(value = "调试科研创新管理 - 预算年度 - 导出Excel")
//    @UBA(module = "调试科研创新管理", action = "预算明细 导出", channel = OperatorType.Button)
    @RequestMapping(value = "/exportExcel", method = {RequestMethod.POST})
    @ResponseBody
    public Object exportExcel(HttpServletRequest request, @RequestBody Map<String, Object> params) {
        AjaxResult ajaxResult = null;
        try {
            CreateFileInfo createFileInfo = budgetInfoService.exportExcel(params);
            return AjaxResultUtil.createSuccessMessage(createFileInfo);
        } catch (Exception e) {
            LOGGER.error("BudgetItemController exportExcel error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }
}
